import {
  PrintTemplateUserOutputDto,
  PrintUserDtoSimple,
  PrintTemplateUserDtoSimple,
} from '@/api/report/admin/print/model';
import { ErrorMessageMode } from './typing';

/** 打印参数 */
export interface PrintProps {
  /** 表单标识 */
  formIndex: string;
  /** 主键字段 */
  keyField: string;
  /** 获取表单数据 */
  getFormData: () => Recordable;
  /** 启用权限 */
  enablePermission?: boolean;
  /** 权限 */
  permission?: {
    /** 打印权限 */ print?: string | string[];
    /** 预览权限 */ preview?: string | string[];
    /** 模板权限 */ template?: string | string[];
  };
  /** 处理程序 */
  handler?: {
    /** 打印处理程序 */
    printHandler: (params?: Recordable<any>) => Promise<void>;
    /** 打印预览处理程序 */
    printPreviewHandler: (params?: Recordable<any>) => Promise<void>;
    /** 打印模板处理程序 */
    printTemplateHandler: (params?: Recordable<any>) => Promise<void>;
    /** 打印模板设置默认处理程序 */
    printTemplateSetDefaultHandler: (params?: Recordable<any>) => Promise<boolean>;
    /** 打印模板取消默认设置处理程序 */
    printTemplateCancelDefaultHandler: (params?: Recordable<any>) => Promise<boolean>;
  };
}

/** 模板弹窗参数 */
export const templateModalProps = {
  /** 打印编码 */
  printCode: { type: String, default: '' },
  /** 获取模板集合 */
  getTemplatesApi: {
    type: Function as PropType<(printCode?: string) => Promise<PrintTemplateUserOutputDto[]>>,
    default: null,
  },
  /** 设置默认打印模板 */
  setDefaultTemplateApi: {
    type: Function as PropType<(dtos: PrintTemplateUserDtoSimple[]) => Promise<boolean>>,
    default: null,
  },
  /** 取消默认打印模板 */
  cancelDefaultTemplateApi: {
    type: Function as PropType<(dtos: PrintUserDtoSimple[]) => Promise<boolean>>,
    default: null,
  },
  /** 执行打印 */
  executePrintApi: {
    type: Function as PropType<
      (templateId: string | bigint, errorMessageMode?: ErrorMessageMode) => Promise<void>
    >,
    default: null,
  },
};
